package model

import "time"

// PermissionLog 权限日志模型
// 记录用户权限验证和权限变更的详细日志
type PermissionLog struct {
	ID             uint      `gorm:"primaryKey" json:"id"`
	UserID         uint      `gorm:"type:int;index;comment:用户ID" json:"userId"`
	Username       string    `gorm:"type:varchar(50);index;comment:用户名" json:"username"`
	ActionType     string    `gorm:"type:varchar(20);index;comment:操作类型:ACCESS-访问验证,CHANGE-权限变更,DENY-访问拒绝" json:"actionType"`
	PermissionCode string    `gorm:"type:varchar(100);index;comment:权限码" json:"permissionCode"`
	ResourceName   string    `gorm:"type:varchar(100);comment:资源名称" json:"resourceName"`
	Module         string    `gorm:"type:varchar(50);index;comment:所属模块" json:"module"`
	Method         string    `gorm:"type:varchar(10);comment:请求方法" json:"method"`
	Path           string    `gorm:"type:varchar(200);comment:请求路径" json:"path"`
	IP             string    `gorm:"type:varchar(50);comment:IP地址" json:"ip"`
	UserAgent      string    `gorm:"type:varchar(500);comment:用户代理" json:"userAgent"`
	Result         int8      `gorm:"type:tinyint;comment:验证结果:0-拒绝,1-通过" json:"result"`
	Reason         string    `gorm:"type:varchar(200);comment:拒绝原因" json:"reason"`
	OldValue       string    `gorm:"type:text;comment:变更前的值(JSON)" json:"oldValue,omitempty"`
	NewValue       string    `gorm:"type:text;comment:变更后的值(JSON)" json:"newValue,omitempty"`
	OperatorID     uint      `gorm:"type:int;comment:操作人ID(用于权限变更)" json:"operatorId,omitempty"`
	OperatorName   string    `gorm:"type:varchar(50);comment:操作人名称" json:"operatorName,omitempty"`
	Remark         string    `gorm:"type:varchar(500);comment:备注" json:"remark"`
	CreatedAt      time.Time `gorm:"index" json:"createdAt"`
}

// TableName 指定表名
func (PermissionLog) TableName() string {
	return "sys_permission_log"
}

// 操作类型常量
const (
	PermissionActionAccess = "ACCESS" // 访问验证
	PermissionActionChange = "CHANGE" // 权限变更
	PermissionActionDeny   = "DENY"   // 访问拒绝
)

// 验证结果常量
const (
	PermissionResultDeny  = 0 // 拒绝
	PermissionResultAllow = 1 // 通过
)
